home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / asm-xtensa / cacheasm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.2 KB  |  178 lines

  1. /*
  2.  * include/asm-xtensa/cacheasm.h
  3.  *
  4.  * This file is subject to the terms and conditions of the GNU General Public
  5.  * License.  See the file "COPYING" in the main directory of this archive
  6.  * for more details.
  7.  *
  8.  * Copyright (C) 2006 Tensilica Inc.
  9.  */
  10.  
  11. #include <asm/cache.h>
  12. #include <asm/asmmacro.h>
  13. #include <linux/stringify.h>
  14.  
  15. /*
  16.  * Define cache functions as macros here so that they can be used
  17.  * by the kernel and boot loader. We should consider moving them to a
  18.  * library that can be linked by both.
  19.  *
  20.  * Locking
  21.  *
  22.  *   ___unlock_dcache_all
  23.  *   ___unlock_icache_all
  24.  *
  25.  * Flush and invaldating
  26.  *
  27.  *   ___flush_invalidate_dcache_{all|range|page}
  28.  *   ___flush_dcache_{all|range|page}
  29.  *   ___invalidate_dcache_{all|range|page}
  30.  *   ___invalidate_icache_{all|range|page}
  31.  *
  32.  */
  33.  
  34.     .macro    __loop_cache_all ar at insn size line_width
  35.  
  36.     movi    \ar, 0
  37.  
  38.     __loopi    \ar, \at, \size, (4 << (\line_width))
  39.     \insn    \ar, 0 << (\line_width)
  40.     \insn    \ar, 1 << (\line_width)
  41.     \insn    \ar, 2 << (\line_width)
  42.     \insn    \ar, 3 << (\line_width)
  43.     __endla    \ar, \at, 4 << (\line_width)
  44.  
  45.     .endm
  46.  
  47.  
  48.     .macro    __loop_cache_range ar as at insn line_width
  49.  
  50.     extui    \at, \ar, 0, \line_width
  51.     add    \as, \as, \at
  52.  
  53.     __loops    \ar, \as, \at, \line_width
  54.     \insn    \ar, 0
  55.     __endla    \ar, \at, (1 << (\line_width))
  56.  
  57.     .endm
  58.  
  59.  
  60.     .macro    __loop_cache_page ar at insn line_width
  61.  
  62.     __loopi    \ar, \at, PAGE_SIZE, 4 << (\line_width)
  63.     \insn    \ar, 0 << (\line_width)
  64.     \insn    \ar, 1 << (\line_width)
  65.     \insn    \ar, 2 << (\line_width)
  66.     \insn    \ar, 3 << (\line_width)
  67.     __endla    \ar, \at, 4 << (\line_width)
  68.  
  69.     .endm
  70.  
  71.  
  72. #if XCHAL_DCACHE_LINE_LOCKABLE
  73.  
  74.     .macro    ___unlock_dcache_all ar at
  75.  
  76.     __loop_cache_all \ar \at diu XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
  77.  
  78.     .endm
  79.  
  80. #endif
  81.  
  82. #if XCHAL_ICACHE_LINE_LOCKABLE
  83.  
  84.     .macro    ___unlock_icache_all ar at
  85.  
  86.     __loop_cache_all \ar \at iiu XCHAL_ICACHE_SIZE XCHAL_ICACHE_LINEWIDTH
  87.  
  88.     .endm
  89. #endif
  90.  
  91.     .macro    ___flush_invalidate_dcache_all ar at
  92.  
  93.     __loop_cache_all \ar \at diwbi XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
  94.  
  95.     .endm
  96.  
  97.  
  98.     .macro    ___flush_dcache_all ar at
  99.  
  100.     __loop_cache_all \ar \at diwb XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
  101.  
  102.     .endm
  103.  
  104.  
  105.     .macro    ___invalidate_dcache_all ar at
  106.  
  107.     __loop_cache_all \ar \at dii __stringify(DCACHE_WAY_SIZE) \
  108.              XCHAL_DCACHE_LINEWIDTH
  109.  
  110.     .endm
  111.  
  112.  
  113.     .macro    ___invalidate_icache_all ar at
  114.  
  115.     __loop_cache_all \ar \at iii __stringify(ICACHE_WAY_SIZE) \
  116.              XCHAL_ICACHE_LINEWIDTH
  117.  
  118.     .endm
  119.  
  120.  
  121.  
  122.     .macro    ___flush_invalidate_dcache_range ar as at
  123.  
  124.     __loop_cache_range \ar \as \at dhwbi XCHAL_DCACHE_LINEWIDTH
  125.  
  126.     .endm
  127.  
  128.  
  129.     .macro    ___flush_dcache_range ar as at
  130.  
  131.     __loop_cache_range \ar \as \at dhwb XCHAL_DCACHE_LINEWIDTH
  132.  
  133.     .endm
  134.  
  135.  
  136.     .macro    ___invalidate_dcache_range ar as at
  137.  
  138.     __loop_cache_range \ar \as \at dhi XCHAL_DCACHE_LINEWIDTH
  139.  
  140.     .endm
  141.  
  142.  
  143.     .macro    ___invalidate_icache_range ar as at
  144.  
  145.     __loop_cache_range \ar \as \at ihi XCHAL_ICACHE_LINEWIDTH
  146.  
  147.     .endm
  148.  
  149.  
  150.  
  151.     .macro    ___flush_invalidate_dcache_page ar as
  152.  
  153.     __loop_cache_page \ar \as dhwbi XCHAL_DCACHE_LINEWIDTH
  154.  
  155.     .endm
  156.  
  157.  
  158.     .macro ___flush_dcache_page ar as
  159.  
  160.     __loop_cache_page \ar \as dhwb XCHAL_DCACHE_LINEWIDTH
  161.  
  162.     .endm
  163.  
  164.  
  165.     .macro    ___invalidate_dcache_page ar as
  166.  
  167.     __loop_cache_page \ar \as dhi XCHAL_DCACHE_LINEWIDTH
  168.  
  169.     .endm
  170.  
  171.  
  172.     .macro    ___invalidate_icache_page ar as
  173.  
  174.     __loop_cache_page \ar \as ihi XCHAL_ICACHE_LINEWIDTH
  175.  
  176.     .endm
  177.  
  178.